/**
 * @author GJ
 */
urule.Condition = function (parentContainer) {
  this.container = $('<span>')
  parentContainer.append(this.container)

  this.label = generateContainer()
  this.container.append(this.label)
  this.label.css({
    color: 'blue'
  })
  URule.setDomContent(this.label, '请选择类型')
  this.valueContainer = $('<span>')
  this.container.append(this.valueContainer)
  this.initMenu()
}
urule.Condition.prototype.initMenu = function (constantLibraries) {
  var self = this
  self.menu = new URule.menu.Menu({
    menuItems: [
      // {
      // 	label:"选择变量",
      // 	onClick:function(){
      // 		self.type="variable";
      // 		if(self.parameterValue){
      // 			self.parameterValue.getContainer().hide();
      // 		}
      // 		if(self.functionValue){
      // 			self.functionValue.getContainer().hide();
      // 		}
      // 		if(self.methodValue){
      // 			self.methodValue.getContainer().hide();
      // 		}
      // 		if(self.variableValue){
      // 			self.variableValue.getContainer().show();
      // 		}else{
      // 			self.variableValue=new urule.VariableValue(self.arithmetic,null,"In",null,false);
      // 			self.valueContainer.append(self.variableValue.getContainer());
      // 		}
      // 		if(self.operator){
      // 			self.operator.getContainer().show();
      // 		}else{
      // 			self.operator=new urule.ComparisonOperator(function(){
      // 				self.inputType=self.operator.getInputType();
      // 				if(self.inputType){
      // 					self.container.append(self.inputType.getContainer());
      // 				}
      // 			});
      // 			self.container.append(self.operator.getContainer());
      // 		}
      // 		self.label.css({
      // 			"color":"white"
      // 		});
      // 		URule.setDomContent(self.label,".");

      // 	}
      // },
      {
        label: '选择参数',
        onClick: function () {
          self.type = 'parameter'
          if (self.variableValue) {
            self.variableValue.getContainer().hide()
          }
          if (self.methodValue) {
            self.methodValue.getContainer().hide()
          }
          if (self.functionValue) {
            self.functionValue.getContainer().hide()
          }
          if (self.parameterValue) {
            self.parameterValue.getContainer().show()
          } else {
            self.parameterValue = new urule.ParameterValue(self.arithmetic, null, 'In')
            self.valueContainer.append(self.parameterValue.getContainer())
          }
          if (self.operator) {
            self.operator.getContainer().show()
          } else {
            self.operator = new urule.ComparisonOperator(function () {
              self.inputType = self.operator.getInputType()
              if (self.inputType) {
                self.container.append(self.inputType.getContainer())
              }
            })
            self.container.append(self.operator.getContainer())
          }
          self.label.css({
            color: 'white'
          })
          URule.setDomContent(self.label, '.')
        }
      }
      // {
      // 	label:"选择方法",
      // 	onClick:function(){
      // 		self.type="method";
      // 		if(self.variableValue){
      // 			self.variableValue.getContainer().hide();
      // 		}
      // 		if(self.parameterValue){
      // 			self.parameterValue.getContainer().hide();
      // 		}
      // 		if(self.functionValue){
      // 			self.functionValue.getContainer().hide();
      // 		}
      // 		if(self.methodValue){
      // 			self.methodValue.getContainer().show();
      // 		}else{
      // 			self.methodValue=new urule.MethodValue(self.arithmetic,null);
      // 			self.valueContainer.append(self.methodValue.getContainer());
      // 		}
      // 		if(self.operator){
      // 			self.operator.getContainer().show();
      // 		}else{
      // 			self.operator=new urule.ComparisonOperator(function(){
      // 				self.inputType=self.operator.getInputType();
      // 				if(self.inputType){
      // 					self.container.append(self.inputType.getContainer());
      // 				}
      // 			});
      // 			self.container.append(self.operator.getContainer());
      // 		}
      // 		self.label.css({
      // 			"color":"white"
      // 		});
      // 		URule.setDomContent(self.label,".");

      // 	}
      // },
      // {
      // 	label:"选择函数",
      // 	onClick:function(){
      // 		self.type="commonfunction";
      // 		if(self.variableValue){
      // 			self.variableValue.getContainer().hide();
      // 		}
      // 		if(self.parameterValue){
      // 			self.parameterValue.getContainer().hide();
      // 		}
      // 		if(self.methodValue){
      // 			self.methodValue.getContainer().hide();
      // 		}
      // 		if(self.functionValue){
      // 			self.functionValue.getContainer().show();
      // 		}else{
      // 			self.functionValue=new urule.FunctionValue(self.arithmetic,null,"In");
      // 			self.valueContainer.append(self.functionValue.getContainer());
      // 		}
      // 		if(self.operator){
      // 			self.operator.getContainer().show();
      // 		}else{
      // 			self.operator=new urule.ComparisonOperator(function(){
      // 				self.inputType=self.operator.getInputType();
      // 				if(self.inputType){
      // 					self.container.append(self.inputType.getContainer());
      // 				}
      // 			});
      // 			self.container.append(self.operator.getContainer());
      // 		}
      // 		self.label.css({
      // 			"color":"white"
      // 		});
      // 		URule.setDomContent(self.label,".");

      // 	}
      // }
    ]
  })
  this.label.click(function (e) {
    self.menu.show(e)
  })
}
urule.Condition.prototype.initData = function (data) {
  this.label.css({
    color: 'white'
  })
  URule.setDomContent(this.label, '.')
  var leftData = data.left
  this.type = leftData.type || 'parameter'
  if (this.variableValue) {
    this.variableValue.getContainer().hide()
  }
  this.parameterValue = new urule.ParameterValue(null, leftData, 'In')
  this.valueContainer.append(this.parameterValue.getContainer())

  if (this.operator) {
    this.operator.getContainer().show()
  } else {
    var self = this
    this.operator = new urule.ComparisonOperator(function () {
      self.inputType = self.operator.getInputType()
      if (self.inputType) {
        self.container.append(self.inputType.getContainer())
      }
    })
    this.container.append(this.operator.getContainer())
  }
  var op = data.op
  this.operator.setOperator(op)
  this.operator.initRightValue(data.value)
  this.inputType = this.operator.getInputType()
  if (this.inputType) {
    this.container.append(this.inputType.getContainer())
  }
}
urule.Condition.prototype.toXml = function () {
  if (!this.operator) {
    throw '请选择类型!'
    return
  }
  var xml = '<atom op="' + this.operator.getOperator() + '">'
  xml += '<left '
  if (this.type == 'variable') {
    xml += this.variableValue.toXml()
  } else if (this.type == 'parameter') {
    xml += this.parameterValue.toXml()
  } else if (this.type == 'method') {
    xml += this.methodValue.toXml()
  } else if (this.type == 'commonfunction') {
    xml += this.functionValue.toXml()
  }
  xml += ' type="' + this.type + '">'
  if (this.type == 'method') {
    var parameters = this.methodValue.action.parameters
    for (var i = 0; i < parameters.length; i++) {
      var p = parameters[i]
      xml += p.toXml()
    }
  } else if (this.type == 'commonfunction') {
    xml += this.functionValue.getParameter().toXml()
  }
  xml += '</left>'
  if (this.inputType) {
    xml += this.inputType.toXml()
  }
  xml += '</atom>'
  return xml
}
urule.Condition.prototype.getVariableValue = function () {
  return this.variableValue
}
urule.Condition.prototype.getOperator = function () {
  return this.operator
}
urule.Condition.prototype.getInputType = function () {
  return this.inputType
}
